package com.example.kotlinstudy

import android.content.Intent
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.util.Log
import android.view.View
import com.example.kotlinstudy.ui.main.MainFragment

class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.main_activity)
        if (savedInstanceState == null) {
            supportFragmentManager.beginTransaction()
                .replace(R.id.container, MainFragment.newInstance())
                .commitNow()
        }
        /**
         * 1.空类型测试 ，内联扩展函数:also ...
         */
        a(null, "b")

        /**
         * 2.return、break 和 continue
         */
        testMethod();
        /**
         * 3.复合符号
         */
        // https://blog.csdn.net/lckj686/article/details/80448471 ：Kotlin (一) 复合符号( '?.' '?:' '!!' 'as?' '?' )

        /**
         * 4.equal
         */
        equal("B", "B")


        /**
         * 5.静态方法
         */
        val sum = sum(10, 10)
        Log.e("----->", "$sum")

        /**
         * 6.静态对象
         * object XXX:User(){
         *
         *    }
         */

        //判断对象是否相等  ===  要用三个等号
    }


    private fun testMethod() {
        var arrayList = ArrayList<Int>();

        arrayList.add(1)
        arrayList.add(2)
        arrayList.add(3)
        //第一种方式 forEach里面没有break
        arrayList.forEach loop@{ i ->
            if (i == 2) {
                return@loop //相当于@forEach=continue,结束本次循环.但也可以指定个位置在{前面loop@ ，  ==@forEach  同样的效果
//                return //整个方法返回了！
            }
            Log.e("testMethod----->", ":$i")
        }

        //第二种方式  循环
        for (i in 0..arrayList.size) {
            if (i == 2) {
//                break //for里面才有break关键字 ,break跳出for循环
                continue //continue跳出本次循环
            }
            Log.e("testMethod-break----->", ":$i")
        }
        Log.e("testMethod----->", "结束！")

    }

    fun a(tag: String?, type: String) {

        if (tag == null && type != null) {
            Log.e("----->", "进行方法！")
        }
        if (tag.isNullOrEmpty()) {
            Log.e("----->", " isNullOrEmpty 判断是 null 和长度")
        }
        var x = tag ?: "hello" //如果不为null就是他自己,  如果为null就把hello赋值给他
        Log.e("----->", "?: $x")

        /**
         *  内联扩展函数：
         */
        var user = User();
        user.age = "26"
        user.name = "lzj"

        var s = user?.let {
            //1.可以判空操作
            Log.e("----->", "let-->${it.name}")//  用it.拿取对面里面的内容
            "fdf"//可以指定一个返回值,如果不指定默认返回int类型
        }
        var s1 = user?.apply {
            Log.e("----->", "apply-->$name")// 直接使用 全取对象里面的内容
            "fdfd"   //而apply始终返回他本身的对象，更适合做对面的多级处理
        }?.addr?.apply {
            Log.e("----->", "apply-->$addr")
        }


        val tagg = tag ?: "发财了~~~"
        tagg?.also {
            Log.e("----->", "also-->$it")
        }
        tagg?.run {
            Log.e("----->", "run-->$this")
        }


    }

    //比较
    fun equal(str: String, str1: String) {
        if (str == str1) { //相当于equal
            Log.e("lzj", "是相等")
        }
    }

    //主方法  相当于java中的静态方法
    companion object {
        @JvmStatic
        fun main(args: Array<String>) {
            val arrayListOf = arrayListOf<Int>(5, 10, 4, 3)
            sortList(arrayListOf)
            arrayListOf.forEach {
                print("$it ")
            }
        }

        //冒泡排序
        private fun sortList(arrayListOf: ArrayList<Int>) {
//            0 until arrayListOf.size   = 0123
            for (y in 0 until arrayListOf.size) {
                for (x in 0 until (arrayListOf.size - y - 1)) {
                    var temp: Int
                    if (arrayListOf[x] > arrayListOf[x + 1]) {
                        temp = arrayListOf[x + 1]
                        arrayListOf[x + 1] = arrayListOf[x]
                        arrayListOf[x] = temp
                    }
                }
            }
        }

        fun sum(x: Int, y: Int): Int {
            return x + y
        }
    }

    fun click01(view: View) {
        //测试传值
        val intent = Intent(this, Main4Activity::class.java)
        intent.putExtra("data1", Test2Bean(name = "lzj1", ju = "怒火重案1"))
        startActivity(intent)
    }
    fun click02(view: View) {
        //测试传值
        val intent = Intent(this, Main4Activity::class.java)
        intent.putExtra("data", Test1Bean(name = "lzj", ju = "怒火重案"))
        startActivity(intent)

    }

}
